// 1-18 实例-18 求两数的最小公倍数
/**
 * 最大公约数，GCD 最小公倍数：LCM
 * great 全部；大的；重大的；强烈的；极大的；久的；大写的
 * greatest common divisor 最大公约数
 * least common multiple 最小公倍数
 * 
 * 用户输入两个数，其这两个数的最小公倍数。
 *
 * 最大公约数计算：两数能同时被 i 整除。
 * 最小公倍数计算：两数相乘 / 最大公约数。
 *
 * 17 17 ...17*37
 * 37 37 ...37*17
 */
#include <iostream>
int lcm1(int a, int b);
int lcm2(int a, int b);

int main(void)
{
  int a, b;
  std::cout << "请输入两个数:";
  std::cin >> a >> b;
  // std::cout << "LCM:" << lcm1(a, b) << std::endl;
  std::cout << "LCM:" << lcm2(a, b) << std::endl;
  printf("---------------end-----------------\n");
  return 0;
}

int lcm1(int a, int b)
{
  int min = a < b ? a : b;
  int max = a > b ? a : b;
  int n = min;
  int i = 1;
  while (max > n ? (max % n != 0) : (n % max != 0))
  {
    i++;
    n = min * i;
  }
  return n;
};

// 最小公倍数 = a*b / 最大公约数
int lcm2(int a, int b)
{
  if (a == b)
    return a;
  int res = a * b;
  while (a != b)
  {
    a > b ? (a -= b) : (b -= a);
  }

  return res / a;
}
